// 页面: 消息
const $app = getApp()
Component({
  properties: {
    noReadMsgNum: { // 未读消息数量
      type: Object
    }
  },
  data: {
    // ========== 参数 ==========
    noReadMsgNum_child: { // 未读消息数量
      sum: 0, // 总
      spsum: 0, // 审批提醒
      dqsum: 0, // 到期提醒
      jfsum: 0, // 缴费提醒
      xjsum: 0 // 巡检提醒
    },
    param: {
      messageStatus: '1', // 消息状态
      messageType: '0', // 消息类型
      ispage: 0, // 是否分页, 0:是 1:否
      pageNo: 1, // 页数
      pageSize: 10 // 条数
    },
    // ========== 数据相关 ==========
    total: 0,
    data: [], // 消息数据
    refreshing: false, // 是否正在刷新中
    loading: false, // 是否正在加载中
    backTop: false, // 滚动条回到顶部(只要改变值就回到顶部)
    // ========== 列表数据 ==========
    listData: {
      messageStatus: [ // 消息状态
        { id: '1', name: '未读 (0)', key: 'sum' },
        { id: null, name: '全部' }
      ],
      messageType: [ // 消息类型
        { id: '0', name: '审批 (0)', key: 'spsum', text: '审批' },
        { id: '1', name: '到期 (0)', key: 'dqsum', text: '到期' },
        { id: '2', name: '缴费 (0)', key: 'jfsum', text: '缴费' },
        { id: '3', name: '巡检 (0)', key: 'xjsum', text: '巡检' }
      ]
    }
    // ========== end ==========
  },
  lifetimes: {
    attached () { // 组件生命周期: 在组件实例进入页面节点树时执行
      $app.$common_base.getNoReadMsgNum(true) // 获取未读消息数量
      this.getData() // 获取数据
    }
  },
  observers: {
    'noReadMsgNum': function (noReadMsgNum) { // 监听'noReadMsgNum'
      for (const k in noReadMsgNum) {
        this.setNoReadMsgNum(k, noReadMsgNum[k]) // 重置未读消息数量
      }
    }
  },
  methods: {
    model (e) { $app.$common_wx.model(e, this) }, // 双向绑定
    // ========== 重置未读消息数量 ==========
    setNoReadMsgNum (k, val) {
      const noReadMsgNum_child = this.data.noReadMsgNum_child
      if (val === noReadMsgNum_child[k]) return
      this.setData({ [`noReadMsgNum_child.${k}`]: val })
      let str = ''
      let text = ''
      if (k === 'sum') {
        str = `listData.messageStatus[${0}].name`
        text = `未读 (${val})`
      } else {
        const arr = this.data.listData.messageType
        const i = arr.findIndex(b => b.key === k)
        str = `listData.messageType[${i}].name`
        text = `${arr[i].text} (${val})`
      }
      this.setData({ [str]: text })
    },
    // ========== 获取数据 ==========
    getData (RAndL) {
      if (!RAndL) {
        $app.$common.openLoading() // 开启加载
        this.setData({ ['param.pageNo']: 1 })
      }
      $app.$api.systemmessage.selectsystemmessagelist({
        '*': true,
        '/': true,
        ...this.data.param,
        userId: $app.userInfo.id,
        roleId: $app.userInfo.roleid
      }).then(({ data, count }) => {
        console.log('api-消息数据', data, count)
        let newData = data || []
        const total = count || 0
        if (RAndL === 'refresh') { // 刷新
          this.setData({ refreshing: false })
        } else if (RAndL === 'load') { // 加载
          newData = this.data.data.concat(newData)
          this.setData({ loading: false })
        } else {
          this.setData({ backTop: !this.data.backTop })
        }
        this.setData({ data: newData, total })
        $app.$common.closeLoading() // 关闭加载
      }).catch(({ type, res }) => {
        console.log('api-消息数据', type, res)
        let newData = []
        let total = 0
        if (RAndL === 'refresh') { // 刷新
          this.setData({ refreshing: false })
        } else if (RAndL === 'load') { // 加载
          newData = this.data.data
          total = this.data.total
          const pageNo = this.data.param.pageNo - 1 // 页数
          this.setData({ loading: false, pageNo: pageNo })
        } else {
          this.setData({ backTop: !this.data.backTop })
        }
        this.setData({ data: newData, total })
        $app.$common.closeLoading() // 关闭加载
        $app.$common.message('数据获取失败', 'error') // 提示信息
      })
    },
    // ========== 消息状态改变时 ==========
    messageStatusChange () {
      const arr = this.data.listData.messageType
      let obj = {}
      if (this.data.param.messageStatus === '1') { // 已读
        obj = this.data.noReadMsgNum_child
      } else { // 全部
        obj = {}
      }
      arr.forEach((b, i) => {
        const str = `listData.messageType[${i}].name`
        const value = obj[b.key] || obj[b.key] === 0 ? ` (${obj[b.key]})` : ''
        const text = `${b.text}` + value
        this.setData({ [str]: text })
      })
      this.getData() // 获取数据
    },
    // ========== 消息类型改变时 ==========
    messageTypeChange () {
      this.getData() // 获取数据
    },
    // ========== 刷新 ==========
    refresh () {
      this.setData({ ['param.pageNo']: 1 })
      this.getData('refresh') // 获取数据
    },
    // ========== 加载 ==========
    load () {
      if (this.data.data.length >= this.data.total) {
        this.setData({ loading: false })
        return
      }
      const pageNo = this.data.param.pageNo + 1
      this.setData({ ['param.pageNo']: pageNo })
      this.getData('load') // 获取数据
    },
    // ========== 一键设为已读 ==========
    readAll () {
      $app.$common.openLoading() // 开启加载
      $app.$api.systemmessage.updateSystemmessage({
        userId: $app.userInfo.id,
        roleId: $app.userInfo.roleid
      }).then(({ data }) => {
        console.log('api-消息已读', data)
        for (const k in $app.noReadMsgNum) { $app.noReadMsgNum[k] = 0 }
        this.getData() // 获取数据
        // $app.$common.closeLoading() // 关闭加载
      }).catch((res) => {})
    },
    // ========== 设为已读 ==========
    read (e) {
      const obj = { '0': 'spsum', '1': 'dqsum', '2': 'jfsum', '3': 'xjsum' }
      const i = e.currentTarget.dataset.index
      const b = e.currentTarget.dataset.item
      const k = obj[b.messageType]
      $app.$common.openLoading() // 开启加载
      $app.$api.systemmessage.getSystemmessage({
        id: b.id
      }).then(({ data }) => {
        console.log('api-消息已读', data)
        $app.noReadMsgNum.sum--
        $app.noReadMsgNum[k]--
        this.setData({ [`data[${i}].messageStatus`]: '0' })
        $app.$common.closeLoading() // 关闭加载
      }).catch((res) => {})
    }
  }
})